﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using LPV_POS;
using Control;
using DevExpress.XtraGrid.Views.Grid;
using LPV_POS.Module;
using System.IO;
//using SendMail;

namespace LPV.SendMail
{
    public partial class frmMailOption : Form
    {
        xulyngaythangnam ngaythang;
        string[] s;
        object[] o;
        thuvien tv;
        DataSet ds;
        DataTable tb;

        public frmMailOption()
        {
            ngaythang = new xulyngaythangnam();
            InitializeComponent();
            InitControl();
            PhanQuyenHienThi();
            string objNAME_KHO = new cpublic().Registry_Get("frmBH_CAU_HINHcboKHO_MACDINH");
            cboKHO_MACDINH._SetselectedID(objNAME_KHO);
        }

        private void frmMailOption_Load(object sender, EventArgs e)
        {
            dtpTu.Value = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, 0, 0, 0);
            dtpDen.Value = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, 23, 59, 59);


        }

        #region 1.Init Control

        private void InitControl()
        {
            f_showdataoncombox(cboKHO_MACDINH, f_selectdsKhoHangforcom(), "OBJID", "OBJNAME");
            cboKHO_MACDINH._SetselectedID("1");
            cpublic ocpublic = new cpublic();
            foreach (System.Windows.Forms.Control ctr in this.Controls)
            {
                if (ctr.ToString().IndexOf("System.Windows.Forms.CheckBox") == 0)
                {
                        ((CheckBox)ctr).Checked = ocpublic.Registry_Get("Mail"+ctr.Name) == "True";
                }
            }
        }

        // hien thi ds nhom chu len combobox
        private void f_showdataoncombox(AXCombobox cb, DataTable tb, string value, string display)
        {
            cb.Datasource = tb;
            cb.DisplayField = display;
            cb.ValueFiled = value;
            cb._Init();
        }

        #endregion

        #region 2.Xử lý nút

        private void button1_Click(object sender, EventArgs e)
        {
            //Kiem tra mang internet
            if (!IsConnected())
            {
                MessageBox_LPV.Show("Mạng Internet không kết nối.", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return;
            }
            //Guid file
            frmSendMail frm = new frmSendMail();
            frm.ShowDialog();
        }

        private bool IsConnected()
        {
            System.Uri Url = new System.Uri("http://www.google.com");

            System.Net.WebRequest WebReq;
            System.Net.WebResponse Resp;
            WebReq = System.Net.WebRequest.Create(Url);

            try
            {
                Resp = WebReq.GetResponse();
                Resp.Close();
                WebReq = null;
                return true;
            }

            catch
            {
                WebReq = null;
                return false;
            }
        }

        private void button2_Click(object sender, EventArgs e)
        {
            #region "   xuat FILE ra EXCEL"
            //Ghi vao registry những báo cáo cần xuất

            //
            XuatBaoCaoExcel();
            #endregion
        }

        private void btnThoat_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        #endregion

        #region 3.Xử lý Database

        private DataTable f_selectdsKhoHangforcom()
        {
            tv = new thuvien();
            tb = tv.sql_SelectDataset("DM_KHOHANG").Tables[0];
            DataView dv_temp = tb.DefaultView;
            dv_temp.Sort = "OBJID DESC";
            DataRow myNewRow;
            myNewRow = tb.NewRow();
            myNewRow["OBJID"] = "1";
            myNewRow["OBJNAME"] = "--- Chọn kho hàng ---";
            tb.Rows.Add(myNewRow);
            //  tb.Rows.Add(n);
            tb.Columns.Add("STT", typeof(int));
            for (int i = 0; i < tb.Rows.Count; i++)
                tb.Rows[i]["STT"] = i + 1;

            //DataView dv_temp1 = tb.DefaultView;
            dv_temp.Sort = "STT DESC";
            return dv_temp.ToTable();
        }

        private DataSet f_selectdoanhthu_nhom(Int16 loaidoanhthu, string date_tungay, string date_denngay, string makho, Boolean loaibaocao)
        {
            tv = new thuvien();
            s = new string[] { "@FLAG", "@FROMDATE", "@TODATE", "@MAKHOHANG", "@LOAIBAOCAO" };
            o = new object[] { loaidoanhthu, date_tungay, date_denngay, makho, loaibaocao };
            ds = tv.SP_SelectDataset("sp_baocaodoanhthu_hanghoa", s, o);
            //if (!new cpublic().KiemTra_CoQuyen(this.Name, "lbel_nhomchu", 1))//2011.10.18
            //{

            //    foreach (DataTable tb in ds.Tables)
            //        tb.Rows.Clear();
            //}
            return ds;
        }

        private DataSet f_selectdoanhthu_khohang(Boolean baocaotrongngay, DateTime ngaygio, DateTime date_tungay, DateTime date_denngay, string makho, Boolean bao_cao_Z)
        {
            tv = new thuvien();
            s = new string[] { "@BAO_CAO_TRONG_NGAY", "@NGAYGIO", "@DATE_TUNGAY", "@DATE_DENNGAY", "@MAKHOHANG", "@BAO_CAO_Z" };
            o = new object[] { baocaotrongngay, ngaygio, date_tungay, date_denngay, makho, bao_cao_Z };
            ds = tv.SP_SelectDataset("sp_baocaokho_kho", s, o);

            return ds;
        }

        private DataSet f_selectdoanhthu_nhanvien_phieu(string date_tungay, string date_denngay, string makho, string manhanvien, Boolean loaibaocao)
        {
            tv = new thuvien();
            s = new string[] { "@FLAG", "@FROMDATE", "@TODATE", "@MAKHOHANG", "@MANHANVIEN", "@LOAIBAOCAO" };
            o = new object[] { 1, date_tungay, date_denngay, makho, manhanvien, loaibaocao };
            ds = tv.SP_SelectDataset("sp_baocaodoanhthu_nhanvien5_phieu", s, o);
            //if (!new cpublic().KiemTra_CoQuyen(this.Name, "lble_nhanvien", 1))//2011.10.18
            //{

            //    foreach (DataTable tb in ds.Tables)
            //        tb.Rows.Clear();
            //}
            return ds;
        }

        private DataTable f_SelectNguyenVatLieu()
        {
            Boolean bBAO_CAO_TRONG_NGAY = false;
            DateTime dthang_nam = dtpTu.Value;
            bBAO_CAO_TRONG_NGAY = dtpTu.Value.ToString("dd/MM/yyyy") == dtpDen.Value.ToString("dd/MM/yyyy");
            if (bBAO_CAO_TRONG_NGAY)
                dthang_nam = dtpTu.Value;

            tb = new thuvien().SP_SelectDataTable("sp_DM_NGUYENLIEU",
                                                    new string[] { "@flag", "@thang_nam", "@ma_khohang", "@MANGUYENLIEU", "@DATE_TUNGAY", "@DATE_DENNGAY", "@BAO_CAO_TRONG_NGAY" },
                                                    new object[] { 6, dthang_nam, Variable.ma_khohang, "", dtpTu.Value, dtpDen.Value, bBAO_CAO_TRONG_NGAY });
            return tb;
        }

        private DataTable f_BaoCaoLaiLo()
        {
            tv = new thuvien();
            DataTable tb1 = tv.SP_SelectDataTable("sp_BH_CAOCAO_LAILO",
                                                        new string[] { "@ngay_tu", "@ngay_den" },
                                                        new object[] { dtpTu.Value, dtpDen.Value });
            return tb1;
        }

        #endregion

        #region 4.Hỗ trợ

        private void InitGrid(string[] ArrayCol, string[] ArrayColName,GridView Grid)
        {
            Grid.Columns.Clear();
            for (int i = 0; i < ArrayCol.Length; i++)
            {
                DevExpress.XtraGrid.Columns.GridColumn col = new DevExpress.XtraGrid.Columns.GridColumn();
                col.FieldName = ArrayCol[i];
                col.Caption = ArrayColName[i];
                col.Name = ArrayCol[i];
                col.Visible = true;
                col.VisibleIndex = i;
                Grid.Columns.Add(col);
            }
        }

        private void XuatBaoCaoExcel()
        {
            #region "   xuat FILE ra EXCEL"
            try
            {
                string Folder = Application.StartupPath +@"\AttachFile";
                //kiem tra folder đã tồn tại chưa
                if (!Directory.Exists(Folder))
                {
                    //chưa tồn tại thì tạo ra folder mới
                    Directory.CreateDirectory(Folder);
                }


                this.Cursor = Cursors.WaitCursor;
                //Rút báo cáo doanh thu
                string NHH = DateTime.Now.Day.ToString() + DateTime.Now.Month.ToString() + DateTime.Now.Year.ToString();
                
                string tungay = ngaythang.chuyenngay(dtpTu.Text);
                string denngay = ngaythang.chuyenngay(dtpDen.Text);
                string Khohang = cboKHO_MACDINH._GetselectedID();

                //Ghi vào registry
                cpublic ocpublic = new cpublic();
                foreach (System.Windows.Forms.Control ctr in this.Controls)
                {
                    if (ctr.ToString().IndexOf("System.Windows.Forms.CheckBox") == 0)
                    {
                        WriteRegistry((CheckBox)ctr);
                    }
                }
                //

                if (chk_BC_DoanhThu.Checked == true && chk_BC_DoanhThu.Visible == true)
                {
                    #region "   chk_BC_DoanhThu"
                    //Xuất báo cáo ra Excel
                    DataSet ds = f_selectdoanhthu_nhom(1, tungay, denngay, Khohang, false);
                    ds.Tables[0].Columns.Add("TC_DGG",typeof(System.Decimal));
                    ds.Tables[0].Columns["TC_DGG"].Expression = "THANHTIENTRUOC - CHIECKHAU";


                    DataTable dt = new DataTable("TblDoanhSo");

                    dt.Columns.Add("OBJNAME");
                    dt.Columns.Add("VALUE",typeof(System.Decimal));
                    dt.Clear();
                    DataRow r;


                    try
                    {
                        r = dt.NewRow();
                        r["OBJNAME"] = "Tổng cộng ( Chưa giảm giá )";
                        r["VALUE"] = ds.Tables[0].Rows[0]["THANHTIENTRUOC"];
                        dt.Rows.Add(r);

                        r = dt.NewRow();
                        r["OBJNAME"] = "Giảm giá";
                        r["VALUE"] = ds.Tables[0].Rows[0]["CHIECKHAU"];
                        dt.Rows.Add(r);

                        r = dt.NewRow();
                        r["OBJNAME"] = "Tổng cộng ( Đã giảm giá )";
                        r["VALUE"] = ds.Tables[0].Rows[0]["TC_DGG"];
                        dt.Rows.Add(r);

                        r = dt.NewRow();
                        r["OBJNAME"] = "Phí dịch vụ";
                        r["VALUE"] = ds.Tables[0].Rows[0]["SERVICE_CHARGE"];
                        dt.Rows.Add(r);

                        r = dt.NewRow();
                        r["OBJNAME"] = "Phụ thu";
                        r["VALUE"] = ds.Tables[0].Rows[0]["PHUTHUKHAC"];
                        dt.Rows.Add(r);

                        r = dt.NewRow();
                        r["OBJNAME"] = "Khuyến mãi";
                        r["VALUE"] = ds.Tables[0].Rows[0]["KHUYENMAI"];
                        dt.Rows.Add(r);

                        r = dt.NewRow();
                        r["OBJNAME"] = "Giảm VAT";
                        r["VALUE"] = ds.Tables[0].Rows[0]["VAT"];
                        dt.Rows.Add(r);

                        r = dt.NewRow();
                        r["OBJNAME"] = "Tiền Tip";
                        r["VALUE"] = ds.Tables[0].Rows[0]["TIENTIP"];
                        dt.Rows.Add(r);

                        r = dt.NewRow();
                        r["OBJNAME"] = "Thu";
                        r["VALUE"] = ds.Tables[0].Rows[0]["TONGTHU"];
                        dt.Rows.Add(r);

                        r = dt.NewRow();
                        r["OBJNAME"] = "Chi";
                        r["VALUE"] = ds.Tables[0].Rows[0]["TONGCHI"];
                        dt.Rows.Add(r);

                        r = dt.NewRow();
                        r["OBJNAME"] = "Khách hàng nợ";
                        r["VALUE"] = ds.Tables[0].Rows[0]["CONGNO_ALL"];
                        dt.Rows.Add(r);

                        r = dt.NewRow();
                        r["OBJNAME"] = "Đặt cọc";
                        r["VALUE"] = ds.Tables[0].Rows[0]["DATCOC"];
                        dt.Rows.Add(r);

                        r = dt.NewRow();
                        r["OBJNAME"] = "Trừ đặt cọc";
                        r["VALUE"] = ds.Tables[0].Rows[0]["DATCOC_TRU"];
                        dt.Rows.Add(r);

                        r = dt.NewRow();
                        r["OBJNAME"] = "Tổng cộng (Đã giảm giá,Thuế)";
                        r["VALUE"] = ds.Tables[0].Rows[0]["THANHTIEN"];
                        dt.Rows.Add(r);
                    }
                    catch (Exception)
                    {
                        
                        
                    }
                    

                    luoi_doanhthu.MainView = gridView1;
                    luoi_doanhthu.DataSource = null;
                    string[] str = new string[] {"OBJNAME","VALUE"};
                    string[] strName = new string[] {"",""};
                    InitGrid(str, strName, gridView1);
                    luoi_doanhthu.DataSource = dt;

                    string sPath = Application.StartupPath + @"\AttachFile\BaoCaoDoanhThu_" + NHH + ".xls";

                    luoi_doanhthu.ExportToExcelOld(sPath);
                    #endregion

                }
                //Rút báo cáo kho hàng
                if (chk_BC_KhoHang.Checked == true && chk_BC_KhoHang.Visible == true)
                {
                    #region "   chk_BC_KhoHang"
                    luoi_doanhthu.MainView = grid_doanhthu_khohang;
                    luoi_doanhthu.DataSource = null;

                    DataSet ds = f_selectdoanhthu_khohang(false, dtpDen.Value, dtpTu.Value, dtpDen.Value, Khohang, false);
                    luoi_doanhthu.DataSource = ds.Tables[0];
                    string sPath = Application.StartupPath + @"\AttachFile\BaoCaoKhoHang_" + NHH + ".xls";
                    grid_doanhthu_khohang.ExportToExcelOld(sPath);
                    #endregion
                }
                //Rút báo cáo theo mặt hàng
                if (chk_BC_MatHang.Checked == true && chk_BC_MatHang.Visible == true)
                {
                    #region "   chk_BC_MatHang"
                    luoi_doanhthu.MainView = grid_doanhthu_hanghoa;
                    luoi_doanhthu.DataSource = null;

                    DataSet ds = f_selectdoanhthu_nhom(3, tungay, denngay, Khohang, false);
                    luoi_doanhthu.DataSource = ds.Tables[1];
                    string sPath = Application.StartupPath + @"\AttachFile\BaoCaoMatHang_" + NHH + ".xls";
                    grid_doanhthu_hanghoa.ExportToExcelOld(sPath);
                    #endregion
                }
                //Rút Báo cáo nguyên vật liệu
                if (chk_BC_NguyenLieu.Checked == true && chk_BC_NguyenLieu.Visible == true)
                {
                    #region "   chk_BC_NguyenLieu"
                    //GridView1 : Nguyen Vat Lieu + Bao Cao Lai Lo
                    luoi_doanhthu.MainView = gridView1;
                    luoi_doanhthu.DataSource = null;

                    string[] str = new string[] {"NVLName","DVT",
                        "Ton_Dau","Nhap","Xuat","Ton_Kho"};
                    string[] strName = new string[] {"Nguyên liệu","ĐVT",
                        "Tồn đầu","Nhập","Xuất","Tồn kho"};

                    InitGrid(str, strName, gridView1);

                    DataTable dt = f_SelectNguyenVatLieu();
                    luoi_doanhthu.DataSource = dt;
                    string sPath = Application.StartupPath + @"\AttachFile\BaoCaoNguyenVatLieu_" + NHH + ".xls";
                    gridView1.ExportToExcelOld(sPath);
                    #endregion

                }
                //Rút báo cáo doanh thu theo nhân viên
                if (chk_BC_NhanVien.Checked == true && chk_BC_NhanVien.Visible == true)
                {
                    #region "   chk_BC_NhanVien"
                    luoi_doanhthu.MainView = grid_nhanvien_phieu;
                    luoi_doanhthu.DataSource = null;

                    DataSet ds = f_selectdoanhthu_nhanvien_phieu(tungay, denngay, Khohang, "", true);
                    luoi_doanhthu.DataSource = ds.Tables[0];
                    string sPath = Application.StartupPath + @"\AttachFile\BaoCaoNhanVien_" + NHH + ".xls";
                    grid_nhanvien_phieu.ExportToExcelOld(sPath);
                    #endregion
                }
                //Rút báo cáo lãi lỗ
                if (chk_BC_LaiLo.Checked == true && chk_BC_LaiLo.Visible == true)
                {
                    #region "   chk_BC_LaiLo"
                    luoi_doanhthu.MainView = gridView1;
                    luoi_doanhthu.DataSource = null;
                    string[] str = new string[] {"STT","OBJNAME",
                        "DVT","SO_LUONG","GIA_VON","CHIETKHAU_TIEN","DON_GIA","LAI_LO"};
                    string[] strName = new string[] {"STT","Hàng hóa",
                        "ĐVT","Số Lượng","Giá vốn","Giảm giá","Giá bán","Lãi lỗ"};

                    InitGrid(str, strName, gridView1);

                    DataTable dt = f_BaoCaoLaiLo();
                    luoi_doanhthu.DataSource = dt;
                    string sPath = Application.StartupPath + @"\AttachFile\BaoCaoLaiLo_" + NHH + ".xls";
                    gridView1.ExportToExcelOld(sPath);
                    #endregion
                }

                if (chk_BC_NhomHang.Checked == true && chk_BC_NhomHang.Visible == true)
                {
                    #region "   chk_BC_NhomHang"
                    luoi_doanhthu.MainView = grid_doanhthu_nhomhang;
                    luoi_doanhthu.DataSource = null;

                    DataSet ds = f_selectdoanhthu_nhom(2, tungay, denngay, Khohang, true);
                    luoi_doanhthu.DataSource = ds.Tables[1];
                    string sPath = Application.StartupPath + @"\AttachFile\BaoCaoNhomHang_" + NHH + ".xls";
                    grid_doanhthu_nhomhang.ExportToExcelOld(sPath);
                    #endregion
                }

                this.Cursor = Cursors.Default;
                MessageBox.Show("Rút báo cáo thành công.");
            }
            catch (Exception)
            {
                MessageBox.Show("Rút báo cáo không thành công.");
            }

            #endregion
        }

        #endregion

        #region 5.Phân Quyền

        private void PhanQuyenHienThi()
        {
            cpublic ocpublic = new cpublic();
            //Ẩn các checkbox hiển thị báo cáo trừ báo cáo doanh thu
            chk_BC_LaiLo.Visible = false;
            //chkBCDT.Visible = false; : Báo cáo doanh thu
            chk_BC_NhomHang.Visible = false;
            chk_BC_NhanVien.Visible = false;
            chk_BC_NguyenLieu.Visible = false;
            chk_BC_MatHang.Visible = false;
            chk_BC_KhoHang.Visible = false;

            //Phân quyền hiển thị báo cáo LÃI LỖ
            if (Variable.tbBH_CAU_HINH.Rows[0]["CAPNHAT_LAILO"].ToString() + "" == "True")
                chk_BC_LaiLo.Visible = true;
            //Phân quyền hiển thị báo cáo nhân viên
            if (ocpublic.Registry_Get(chk_BC_NhanVien.Name) + "" == "True")
                chk_BC_NhanVien.Visible = true;
            //Phân quyền hiển thị báo cáo nhóm hàng
            if (ocpublic.Registry_Get("chk_BC_Nhom") + "" == "True")
                chk_BC_NhomHang.Visible = true;
            //Phân quyền hiển thị báo cáo kho hàng
            if (ocpublic.Registry_Get(chk_BC_KhoHang.Name) + "" == "True")
                chk_BC_KhoHang.Visible = true;
            //Phân quyền hiển thị báo cáo nguyên liệu
            if (ocpublic.Registry_Get(chk_BC_NguyenLieu.Name) + "" == "True")
                chk_BC_NguyenLieu.Visible = true;
            //Phân quyền hiển thị báo cáo mặt hàng
            if (ocpublic.Registry_Get(chk_BC_MatHang.Name) + "" == "True")
                chk_BC_MatHang.Visible = true;

        }

        private void WriteRegistry(CheckBox chk)
        {
            cpublic ocpublic = new cpublic();
            ocpublic.Registry_Set("Mail"+chk.Name,chk.Checked.ToString());
        }

        #endregion

    }
}
